﻿//// Copyright (c) rubicon IT GmbH, www.rubicon.eu
////
//// See the NOTICE file distributed with this work for additional information
//// regarding copyright ownership.  rubicon licenses this file to you under 
//// the Apache License, Version 2.0 (the "License"); you may not use this 
//// file except in compliance with the License.  You may obtain a copy of the 
//// License at
////
////   http://www.apache.org/licenses/LICENSE-2.0
////
//// Unless required by applicable law or agreed to in writing, software 
//// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
//// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the 
//// License for the specific language governing permissions and limitations
//// under the License.

//using System.Collections.Generic;
//using ActiveAttributes.Model;
//using ActiveAttributes.Weaving.Expressions;
//using Microsoft.Scripting.Ast;
//using System.Linq;

//namespace ActiveAttributes.Weaving
//{
//  public class AdviceWeaver2 : ExpressionVisitor
//  {
//    private IEnumerable<Aspect> _aspects; 

//    public Expression Weave (MethodExecutionExpression executionExpression, IEnumerable<Aspect> aspects)
//    {
//      _aspects = aspects;


//    }

//    public override Expression Visit (Expression expression)
//    {
//      var joinPoint = new JoinPoint(...)
//      var advices = _composer.Compose (_aspects.SelectMany (x => x.Advices), JoinPoint);

//      return new WeavingExpression (Visit(expression), advices.Where(x => Before), ..., ...)
//    }

//    public Expression VisitExecution (MethodExecutionExpression expression)
//    {
      
//    }
//  }
//}